// 这里面放的就是 vuex 相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import setting from './modules/setting'

// 插件安装
Vue.use(Vuex)

// 创建仓库
const store = new Vuex.Store({
  state: {
    // 通过 state 可以提供数据 (所有组件共享的数据)
    title: '仓库大标题',
    count: 100,
    list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  },
  // 2.通过mutations可以提供修改数据的方法
  mutations: {
    // 所有的mutation函数，第一个参数，都是state
    addCount (state, n) {
      // 修改数据
      state.count += n
    },
    addFive (state) {
      state.count += 5
    },
    changeTitle (state, newTitle) {
      state.title = newTitle
    },
    subCount (state, n) {
      state.count -= n
    },
    changeCount (state, newCount) {
      state.count = newCount
    }
  },
  // 3.actions 处理异步
  // 注意： 不能直接操作 state ,操作state 还是需要 commit mutation
  actions: {
    // context  上下文 (此处未分模块，可以放当成 store 仓库)
    // context.commit('mutation', 额外参数)
    changeCountAction (context, num) {
      setTimeout(() => {
        context.commit('changeCount', num)
      }, 1000)
    }
  },
  // 注意点
  // 4.getter 类似于计算属性
  getters: {
    // 1.形参第一个参数就是state
    // 2.必须有返回值，返回值就i是getters的值
    // 基于state里的list
    filterList (state) {
      return state.list.filter(item => item > 5)
    }
  },
  // 5.modules 模块
  modules: {
    user,
    setting
  }
}

)

// 导出给main.js使用
export default store
